package com.company.kotlinlearn.viewmodel

import android.os.Bundle
import android.view.LayoutInflater
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.company.kotlinlearn.databinding.ActivityViewModelBinding

private const val TAG = "DataBindActivity"

/**
 * ViewModel 与 Lifecycler绑定，所以生命周期比activity长
 * 旋转屏幕时，就算activity被销毁重建也不会影响到viewModel中的数据
 * 通过操作同一个viewModel可以实现Activity与Fragment、Fragment与Fragment之间的通信
 *
 * ViewBinding 把findViewById封装出去了
 * ViewBinding相对于传统findViewById的区别
 * 1.null安全：由于视图绑定会创建对视图的直接引用，因此不存在视图ID无效而引发的空指针异常
 * 此外如果视图仅出现在布局的某些配置中，则绑定类中包含其引用的字段会使用@Nullable标记
 * 2.类型安全：每个绑定类中的字段均具有与它们在XML文件中引用的视图相匹配的类型，不会发生类型转换异常的情况
 * */
class ViewModelActivity : AppCompatActivity() {

    private var num = 0
    private lateinit var textView: TextView
    private lateinit var viewBinding: ActivityViewModelBinding

    private val viewModel by lazy {
        ViewModelProvider(this).get(DataViewModel::class.java)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewBinding = ActivityViewModelBinding.inflate(LayoutInflater.from(this), null, false)
//        setContentView(R.layout.activity_view_model)
        setContentView(viewBinding.root)
//        textView = findViewById(R.id.text_data)
//        textView = viewBinding.textData
        viewModel.getDataLiveData().observe(this, Observer {
//            textView.text = it.toString()
            viewBinding.textData.text = it.toString()

        })
        viewBinding.textData.setOnClickListener {
            viewModel.plusOne()
//            textView.text = num.toString()
//            num++
        }
    }
}